package com.tanhua.server.controller;

import com.tanhua.autoconfig.templates.SmsTemplate;
import com.tanhua.server.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;
import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/user")
@Slf4j
public class LoginController {

    @Autowired
    private SmsTemplate smsTemplate;

    @Autowired
    private UserService userService;

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    /**
     * 登录-发送验证码
     *    请求连接：POST   /login
     *    请求参数：
     *      Body类型：请求参数传递的是json
     *         phone
     *              {
     *                  "phone":"13800138000"
     *              }
     *         @RequestBody  domain：对象中的属性
     *                       Map：map集合中的key
     *
     *     响应数据：void
     * 返回值：
     *    Spring内置的相应对象：ResponseEntity，可以指定状态码
     */
    @PostMapping("/login")
    public ResponseEntity login(@RequestBody Map map) {
        //1、获取请求的手机号码  1380013800
        String phone = map.get("phone").toString();
        log.debug("phone="+phone);
        //2、调用组件SmsTemplate发送验证码
        //2.1 生成验证码
        String code = "123456";
        //String code = RandomUtil.randomNumbers(6);//生成验证码数字，参数：长度
        //2.2 发送短信
        //smsTemplate.sendSms(phone,code);
        //3、将验证码存入到redis  --123456
        redisTemplate.opsForValue().set("CODE"+phone,code,5, TimeUnit.MINUTES);
        //
        return ResponseEntity.ok(null); //参数：正常返回的数据 ，ok-200
//        return ResponseEntity.status(500).body(null);
    }

    /**
     * 登录-判断验证码
     *   POST   /loginVerification
     *   请求参数：
     *     Body：
     *         phone，verificationCode
     *   返回值：
     *      token，isNew
     *      {
     *          token:"",
     *          isNew:""
     *      }
     *      Map集合
     */
    @PostMapping("/loginVerification")
    public ResponseEntity loginVerification(@RequestBody Map map) {
        //1、获取请求参数
        String phone = map.get("phone").toString();
        String code = map.get("verificationCode").toString();
        //2、完成业务逻辑处理
        Map retMap = userService.loginVerification(phone,code);
        //3、构造返回
        return ResponseEntity.ok(retMap);
    }
}
